import java.util.Arrays;

public class _5_7_homework {
/*    给定一个非空整数数组，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素。
    示例 1:

    输入: [2,2,1]
    输出: 1
    示例 2:

    输入: [4,1,2,1,2]
    输出: 4*/
    public static int fun(int[] array){
        int ret=0;
        for (int i:array) {
            ret^=i;
        }
        return ret;
    }

    public static void main(String[] args) {
        int[] array={2,2,1};
        int num=fun(array);
        System.out.println(num);
    }

/*    给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target 的那 两个 整数，并返回它们的数组下标。
    你可以假设每种输入只会对应一个答案。但是，数组中同一个元素在答案里不能重复出现。
    你可以按任意顺序返回答案。
    示例 1：
    输入：nums = [2,7,11,15], target = 9
    输出：[0,1]
    解释：因为 nums[0] + nums[1] == 9 ，返回 [0, 1] 。*/
    public static int[] target(int[] array,int key){
        int[] result=new int[2];
        for (int i = 0; i < array.length-1; i++) {
            for (int j = array.length-1; j >i ; j--) {
                if (array[i]+array[j]==key){
                    result[0]=array[i];
                    result[1]=array[j];
                }
            }
        }
        return result;
    }

    public static void main05(String[] args) {
        int[] array={2,7,11,15};
        int[] res=target(array,9);
        System.out.println(Arrays.toString(res));
    }


    //给定一个整型数组, 实现冒泡排序(升序排序)
    public static void bubbleSort(int[] array){
        for (int i = 0; i < array.length-1; i++) {
            boolean flg=false;
            for (int j = 0; j <array.length-1-i ; j++) {
                if (array[j]>array[j+1]){
                    int tep=array[j];
                    array[j]=array[j+1];
                    array[j+1]=tep;
                    flg=true;
                }
            }
            if (flg==false){
                return;
            }
        }
    }

    public static void main04(String[] args) {
        int[] array={2,32,423,12,3,5};
        bubbleSort(array);
        System.out.println(Arrays.toString(array));
    }

    //给定一个有序整型数组, 实现二分查找
    public static int binarySearch(int[] array,int key){
        int left=0;
        int right=array.length-1;
        while (left<=right){
            int mid=(left+right)/2;
            if (mid==key){
                return mid;
            }else if (mid>key){
                right=mid-1;
            }else{
                left=mid+1;
            }
        }
        return -1;
    }

    public static void main03(String[] args) {
        int[] array={1,2,3,4,5,6,7};
        int ret=binarySearch(array,3);
        System.out.println(ret);
    }

//    调整数组顺序使得奇数位于偶数之前。调整之后，不关心大小顺序。
//    如数组：[1,2,3,4,5,6]
//    调整后可能是：[1, 5, 3, 4, 2, 6]
    public static void fuc(int[] array){
        int i=0;
        int j=array.length-1;
        while (i<j){
            while (i<j && array[i]%2!=0){
                i++;
            }
            while (i<j && array[j]%2==0){
                j--;
            }
            int temp=array[i];
            array[i]=array[j];
            array[j]=temp;

        }
    }

    public static void main02(String[] args) {
        int[] array={1,2,3,4,5,6};
        fuc(array);
        System.out.println(Arrays.toString(array));
    }


//    实现一个方法 transform, 以数组为参数, 循环将数组中的每个元素 乘以 2 , 并设置到对应的数组元素上.
//    例如 原数组为 {1, 2, 3}, 修改之后为 {2, 4, 6}
    public static void transform(int[] array){
        for (int i = 0; i <array.length ; i++) {
            array[i]=array[i]*2;
        }
    }

    public static void main01(String[] args) {
        int[] array={1,2,3};
        transform(array);
        System.out.println(Arrays.toString(array));
    }
}
